//
//  HMVisitorLoginView.swift
//  新浪微博
//
//  Created by 饶鹏伟 on 16/4/7.
//  Copyright © 2016年 饶鹏伟. All rights reserved.
//

import UIKit
import SnapKit

//定义一个协议 让控制器遵守 可以监听按钮的点击
@objc protocol HMVisitorLoginViewDelegate: NSObjectProtocol{
    
    // 登陆的协议方法 
    // optional代表这个方法是可选的  协议方法如果用optional修饰 下面调用这个方法时可以直接用？判断这个方法在代理对象中是否实现  协议本身是默认不加@objc修饰的 但是如果用到optional 协议必须加@objc修饰
    optional func userWillLogin()
    
    //注册的协议方法
    optional func userWillRegister()
    
}




class HMVisitorLoginView: UIView {
    
    
    //申明代理对象属性 要注意循环引用 Swift中 属性的默认都是strong修饰
    weak var visitorDelegate: HMVisitorLoginViewDelegate?

    //重写父类的方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        //设置引导登录UI界面
        setUI()
        
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
     //对外提供设置界面的方法 参数的默认值如果初始化  外界调用这个方法的时候这个参数可以不传
    func setVisitorInfo(tipText: String, imageName: String, isHome: Bool = false){
        
        if isHome {
            
            //设置动画
            startAnimation()
            
        }else{
            
           //隐藏大房子
            largeHouse.hidden = true
            
            //把圈圈提到最上面
            bringSubviewToFront(circleIcon)
            
        }
        
        //设置图片和文字
        tipLable.text = tipText
        circleIcon.image = UIImage(named: imageName)
        
    }
    
    
    //设置圈圈的动画效果
    private func startAnimation(){
       //创建一个基本动画
        let anim=CABasicAnimation(keyPath: "transform.rotation")
        
       //设置基本动画的基本设置
        anim.repeatCount=MAXFLOAT
        
       //设置动画时间
        anim.duration=15
        
        //动画旋转角度
        anim.toValue=2*M_PI
        
        // 动画执行结束 或者 当前处于非活跃状态下 动画不移除图层
        anim.removedOnCompletion=false
        
        //把动画添加到圈圈的图层上
        circleIcon.layer.addAnimation(anim, forKey: nil)
    }
    
    
    private func setUI(){
        
        //1.设置自身背景颜色
        self.backgroundColor = UIColor(white: 237/255.0, alpha: 1.0);
        
        
        //添加子视图
        addSubview(circleIcon)
        addSubview(maskIconView)
        addSubview(largeHouse)
        addSubview(tipLable)
        addSubview(loginBtn)
        addSubview(registerBtn)
        
        
        
        //设置圈圈的约束 第一种方式 VFL
        /*
        
        *  获取一个约束对象
        *
        *  @param item         需要设置约束的视图
        *  @param attribute    需要约束的属性
        *  @param relatedBy    约束优先级 一般都是 精准约束 .Equal
        *  @param toItem       约束参考的对象
        *  @param attribute    参考的属性
        *  @param multiplier   乘积系数 一般使用 1  不能够使用 0
        *  @param constant     约束值
        *
        *  @return 约束对象
        
        */
        
//        //手写代码添加约束条件 默认的frame布局还是开启的 应该关闭frame布局
//        circleIcon.translatesAutoresizingMaskIntoConstraints=false
//        
//        //设置约束条件 要遵守下面的公式 view1要约束的对象 view2参考的约束对象
//        //view1.attr1 = view2.attr2 * multiplier + constant
//        
//        //获取约束对象 将约束对象添加到父控件上
//        self.addConstraint(NSLayoutConstraint(item: circleIcon, attribute: NSLayoutAttribute.CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1, constant: 0))
//        self.addConstraint(NSLayoutConstraint(item: circleIcon, attribute: NSLayoutAttribute.CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0))
//        
        
        //设置圈圈的约束 第二种方式 第三方框架SnapKit
        
        circleIcon.snp_makeConstraints { (make) -> Void in
          //make 就是 circleIcon 取消了frame布局的对象 
          //禁用掉Autoresizing,因为Autoresizing和autolayout是不能共存的
            
          make.centerX.equalTo(self.snp_centerX)
            
          make.centerY.equalTo(self.snp_centerY).offset(-80)
            
        }
        
        
      // 设置大房子的约束
        
        largeHouse.snp_makeConstraints{ (make) -> Void in
            
            //make.centerX.equalTo(circleIcon.snp_centerX)
            //make.centerY.equalTo(circleIcon.snp_centerY)
            
            make.center.equalTo(circleIcon.snp_center)

        }
        
     //设置文字的约束
        tipLable.snp_makeConstraints{ (make) -> Void in
            
            
            make.centerX.equalTo(self.snp_centerX)
            //为了自动换行 设置宽度约束
            make.width.equalTo(226)
            //约束高度 解决按钮跳动的问题
            make.height.equalTo(40)
            
            make.top.equalTo(circleIcon.snp_bottom).offset(16)
            
        }

        
    //设置登陆的约束
        
        
        loginBtn.snp_makeConstraints{ (make) -> Void in
            
            
            
            make.left.equalTo(tipLable.snp_left)
            
            make.width.equalTo(100)
            
            make.top.equalTo(tipLable.snp_bottom).offset(16)
            
        }
        
        
    //注册的约束
        registerBtn.snp_makeConstraints{ (make) -> Void in
            
            
            make.right.equalTo(tipLable.snp_right)
            
            make.width.equalTo(100)
            
            make.top.equalTo(tipLable.snp_bottom).offset(16)
            
        }
        
        
        
        //背景图片
        maskIconView.snp_makeConstraints { (make) -> Void in
            
          
              make.center.equalTo(circleIcon)
            
        }
        
        
       //添加按钮的点击事件
        loginBtn.addTarget(self, action: "loginBtnDidClick", forControlEvents: .TouchUpInside)
        
        registerBtn.addTarget(self, action: "registerBtnDidClick", forControlEvents: .TouchUpInside)
        
        
    }
    
    
    //监听按钮的点击
    //登陆
    @objc private func loginBtnDidClick(){
        
        print("登陆")
        
        visitorDelegate?.userWillLogin?()
        
        
    }
    
    //注册
    @objc private func registerBtnDidClick(){
        
        print("注册")
        
        visitorDelegate?.userWillRegister?()
    }
    
    
   //首先把子视图懒加载出来 
    //圈圈 大小和图片大小一致
    private lazy var circleIcon: UIImageView=UIImageView(image: UIImage(named: "visitordiscover_feed_image_smallicon"))
    
    //大房子
    private lazy var largeHouse: UIImageView=UIImageView(image: UIImage(named: "visitordiscover_feed_image_house"))
    
    //提示文字
    private lazy var tipLable: UILabel = {
        
        let l=UILabel()
        
        l.text = "关注一些人,回到这里看看有什么惊喜"
        
        l.textColor=UIColor.darkGrayColor()
        
        l.font=UIFont.systemFontOfSize(14)
        //设置换行
        l.numberOfLines=0
        //设置文字居中
        l.textAlignment = .Center
        //设置 最大显示的宽度 如果自适应 就不需要设置这啦
        //l.preferredMaxLayoutWidth=230
        //自适应大小
        l.sizeToFit()
        return l
        
    }()
    
    
    //登录按钮
    private lazy var loginBtn: UIButton = {
        //创建按钮
        let btn=UIButton()
        //设置文字
        btn.setTitle("登录", forState: .Normal)
        //设置文字颜色
        btn.setTitleColor(UIColor.darkGrayColor(), forState: .Normal)
        //设置字体大小
        btn.titleLabel?.font=UIFont.systemFontOfSize(14)
        //设置按钮背景图片
        btn.setBackgroundImage(UIImage(named: "common_button_white_disable"), forState: .Normal)
        //返回
        return btn
    }()
    
    //注册按钮
    private lazy var registerBtn: UIButton = {
        
        let btn=UIButton()
        
        btn.setTitle("注册", forState: .Normal)
        
        btn.setTitleColor(UIColor.orangeColor(), forState: .Normal)
        
        btn.titleLabel?.font=UIFont.systemFontOfSize(14)
        // 设置背景图片
        let image=UIImage(named: "common_button_white_disable")!
        //截取图片 设置图片的拉伸
        let capW=Int(image.size.width*0.5)
        let capH=Int(image.size.height*0.5)
        btn.setBackgroundImage(image.stretchableImageWithLeftCapWidth(capW, topCapHeight: capH), forState: .Normal)
        
        return btn
    }()
  
 
    //  背景图片 遮罩 注意:名字千万不要和系统的maskView冲突了
    private lazy var maskIconView: UIImageView = UIImageView(image: UIImage(named: "visitordiscover_feed_mask_smallicon"))
    
}
